﻿<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Usuario extends Controller_Restrito_Template {

	public function action_index()
	{
		$view = new View('usuario/index');
		
		$view->usuarios = ORM::factory('usuario')
			->order_by('usuario')
			->find_all();
		
		$this->template->body = $view;
	}
	
	public function action_cadastrar()
	{
		$view = new View('usuario/cadastrar');
		
		if(isset($_POST['cadastrar'])):
		
			$post = Validation::factory($_POST);
			$post->rule('usuario', 'not_empty')
				->rule('usuario', 'regex', array(':value', '/^[a-zA-Z_.]++$/iD'))
				->rule('senha', 'not_empty')
				->rule('senha', 'min_length', array(':value', '3'));
			
			if($post->check())
			{
				$usuario = ORM::factory('usuario');
				$usuario->usuario = $post['usuario'];
				$usuario->senha = $post['senha'];
				
				if(! $usuario->exists())
				{
					if($usuario->save())
					{
						Flash::message('success', 'Usuário salvo com sucesso!');
						$this->request->redirect('usuario/index');
					}
					
					Flash::message('error', 'Falha ao salvar o Usuário!');
				}
			}
		endif;
		
		$view->usuarios = ORM::factory('usuario')->order_by('usuario')->find_all();
		
		$this->template->body = $view;
	}
	
	public function action_mudarsenha()
	{
		$view = new View('usuario/mudarsenha');
		
		$usuario = ORM::factory('usuario', $this->usuario['id']);
		
		if(isset($_POST['mudarsenha']))
		{
			$usuario->senha = $_POST['senha'];
			
			if($usuario->save())
			{
				Flash::message('success', 'A senha do usuário:'.$usuario->usuario.' foi alterada com sucesso!');
			}
			else {
				Flash::message('error', 'Ocorreu uma falha ao tentar alterar a senha do usuário');
			}
		}
		
		$view->usuario = $usuario;
		
		$this->template->body = $view;
	}
	
	public function action_editar()
	{
		$view = new View('usuario/editar');
		$usuario = ORM::factory('usuario', $this->request->param('id'));
		
		if(isset($_POST['editar']))
		{
			$usuario->usuario = $_POST['usuario'];
			$usuario->senha = $_POST['senha'];
			if($usuario->save())
			{
				Flash::message('success', 'Usuário alterado com sucesso!');
			}
			else {
				Flash::message('error', 'Falha ao alterar o Usuário!');
			}
		}
		
		$view->usuario = $usuario;
		$view->usuarios = ORM::factory('usuario')->order_by('usuario')->find_all();
		$this->template->body = $view;
	}
	
	public function action_permissoes()
	{
		$view = new View('usuario/permissoes');
		$usuario = ORM::factory('usuario', $this->request->param('id'));
		
		if(isset($_POST['adicionarPermissao']))
		{
			foreach($_POST['permissoes'] as $permissao):
				$permissao = ORM::factory('permissao', $permissao);
				if(!$usuario->has('permissoes', $permissao))
				{
					$usuario->add('permissoes', $permissao);
				}
			endforeach;
			
			$permissoes = ORM::factory('permissao')->find_all();
			foreach($permissoes as $permissao):
				if(! in_array($permissao->id, $_POST['permissoes']))
				{
					$usuario->remove('permissoes', $permissao);
				}
			endforeach;
			
			Flash::message('success', 'As permissões do Usuário foram atualizadas!');
		}
		
		$permissoes = ORM::factory('permissao')
			->order_by('controlador')
			->find_all();
		
		$view->permissoes = $permissoes;
		
		$view->usuario = $usuario;
		$this->template->body = $view;
	}
	
	public function action_apagar()
	{
		$usuario = ORM::factory('usuario', $this->request->param('id'));
		//verifica usuário valido
		if($usuario->loaded())
		{
			//identifica as permissões do usuário
			$permissoes = $usuario->permissoes->find_all();
			//remove as permissões do usuário
			foreach($permissoes as $permissao):
				$usuario->remove('permissoes', $permissao);
			endforeach;
			//apaga o usuário
			if($usuario->delete())
			{
				Flash::message('success', 'Usuário apagado com sucesso!');
			}
			else {
				Flash::message('error', 'Falha ao apagar o Usuário!');
			}
		}
		else {
			Flash::message('error', 'O Usuário é inválido!');
		}
	
		$this->request->redirect('usuario/index');
	}

} // End Usuario
